const state = {
    WRITE_EXTERNAL_STORAGE: false,
    READ_EXTERNAL_STORAGE: false,
    CALL_PHONE: false,
	ACCESS_FINE_LOCATION: false,
	CAMERA: false,
	
    /* #ifdef APP-PLUS */
    isIos: plus.os.name == "iOS",
    /* #endif */
    mapping: {
        'WRITE_EXTERNAL_STORAGE': {
            title: "存储空间/照片权限说明",
            content: "便于您使用该功能上传您的照片/图片/视频及用于更换头像、发布评论/分享、下载、与客服沟通等场景中读取和写入相册和文件内容。",
            methods: 'SET_WRITE_EXTERNAL_STORAGE',
			permissTit:'存储空间/照片权限',
			needModalFlag:true
        },
        'READ_EXTERNAL_STORAGE': {
            title: "存储空间/照片权限说明",
            content: "便于您使用该功能上传您的照片/图片/视频及用于更换头像、发布评论/分享、下载、与客服沟通等场景中读取和写入相册和文件内容。",
            methods: 'SET_READ_EXTERNAL_STORAGE',
			permissTit:'存储空间/照片权限',
			needModalFlag:true,
			authNum:0
        },
        'CALL_PHONE': {
            title: "拨打/管理电话权限说明",
            content: "便于您使用该功能与机构/咨询师/平台客服电话联系。",
            methods: 'SET_CALL_PHONE',
			permissTit:'拨打/管理电话权限',
			needModalFlag:true,
			authNum:0
        },
		'ACCESS_FINE_LOCATION':{
			title: "位置权限说明",
			content: "便于您使用该功能获取您周边咨询师、优秀机构、危机干预中心电话以及创建机构、商铺时获取您当前的位置",
			methods: 'SET_ACCESS_FINE_LOCATION',
			needModalFlag:false,
			authNum:0
		},
		'CAMERA':{
			title: "相机权限说明",
			content: "和心云使用该权限用于扫码绑定邀请/加入档案组、拍摄照片修改用户头像、上传头像/照片功能。",
			methods: 'SET_CAMERA',
			permissTit:'相机权限',
			needModalFlag:true,
			authNum:0
		}
    }
}
const mutations = {
    SET_WRITE_EXTERNAL_STORAGE(state, val) {
        state.WRITE_EXTERNAL_STORAGE = val
    },
    SET_CALL_PHONE(state, val) {
        state.CALL_PHONE = val
    },
    SET_READ_EXTERNAL_STORAGE(state, val) {
        state.READ_EXTERNAL_STORAGE = val
    },
	SET_ACCESS_FINE_LOCATION(state,val){
		state.ACCESS_FINE_LOCATION = val
	},
	SET_CAMERA(state,val){
		state.CAMERA = val
	},
	SET_WRITE_CALENDAR(state,val){
		state.CAMERA = val
	},
	SET_STORAGE_AUTHNUM(state,val){
		state.mapping['READ_EXTERNAL_STORAGE'].authNum = val;
	},
	SET_CALL_PHONE_AUTHNUM(state,val){
		state.mapping['CALL_PHONE'].authNum = val;
	},
	SET_LOCATION_AUTHNUM(state,val){
		state.mapping['ACCESS_FINE_LOCATION'].authNum = val;
	},
	SET_CAMERA_AUTHNUM(state,val){
		state.mapping['CAMERA'].authNum = val;
	}
}
const actions = {
    //权限获取
    async requestPermissions({
        state,
        dispatch,
        commit
    }, permissionID) {
		try {
		    if (!state[permissionID] && !state.isIos) {
		        var viewObj = await dispatch('nativeObjView', permissionID);
				//console.log(viewObj)
				if(state.mapping[permissionID].authNum == 0){
					viewObj.show(); 
				}
		    }
		    console.log('android.permission.' + permissionID, '当前手机权限');
		    return new Promise(async (resolve, reject) => {
		         //苹果不需要这个
		        if(state.isIos){
		            resolve(1);
		            return
		        }
		        // Android权限查询 
		        function requestAndroidPermission(permissionID_) {
		            return new Promise((resolve, reject) => {
		                plus.android.requestPermissions(
		                    [
		                        permissionID_
		                    ], // 理论上支持多个权限同时查询，但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
		                    function (resultObj) {
		                        var result = 0;
		                        for (var i = 0; i < resultObj.granted.length; i++) {
		                            var grantedPermission = resultObj.granted[i];
		                            console.log('已获取的权限：' + grantedPermission);
		                            result = 1
		                        }
		                        for (var i = 0; i < resultObj.deniedPresent
		                            .length; i++) {
		                            var deniedPresentPermission = resultObj
		                                .deniedPresent[
		                                i];
		                            console.log('拒绝本次申请的权限：' + deniedPresentPermission);
		                            result = 0
		                        }
		                        for (var i = 0; i < resultObj.deniedAlways
		                            .length; i++) {
		                            var deniedAlwaysPermission = resultObj.deniedAlways[
		                                i];
		                            console.log('永久拒绝申请的权限：' + deniedAlwaysPermission);
		                            result = -1
		                        }
		                        resolve(result);
		                    },
		                    function (error) {
		                        console.log('申请权限错误：' + error.code + " = " + error
		                            .message);
		                        resolve({
		                            code: error.code,
		                            message: error.message
		                        });
		                    }
		                );
		            });
		        }
		     
		        const result = await requestAndroidPermission(
		            'android.permission.' + permissionID
		        );
		        if (result === 1) {
		            //'已获得授权'
		            commit(state.mapping[permissionID].methods, true)
		        } else if (result === 0) {
		            //'未获得授权'
		            commit(state.mapping[permissionID].methods, false)
		        } else {
		            commit(state.mapping[permissionID].methods, true)
		    		if(state.mapping[permissionID].needModalFlag){
		    			uni.showModal({
		    			    title: '系统提示',
		    				content: state.mapping[permissionID].permissTit + '已被拒绝，请手动前往设置',
		    			    confirmText: "立即设置",
		    			    success: (res) => {
		    			        if (res.confirm) {
		    			            dispatch('gotoAppPermissionSetting')
		    			        }
		    			    }
		    			})
		    		}
		        }
		        if (viewObj) viewObj.close()
		        resolve(result);
		    });
		} catch (error) {
		    console.log(error);
		    //reject(error);
		}
    },
    //提示框
    nativeObjView({
        state
    }, permissionID) {
        const systemInfo = uni.getSystemInfoSync();
        const statusBarHeight = systemInfo.statusBarHeight;
        const navigationBarHeight = systemInfo.platform === 'android' ? 48 : 44; // Set the navigation bar height based on the platform
        const totalHeight = statusBarHeight + navigationBarHeight;
        var view = new plus.nativeObj.View('per-modal', { 
            top: '0px',
            left: '0px',
            width: '100%',
            backgroundColor: '#444',
            //opacity: .5;
        })
        view.drawRect({
            color: '#fff',
            radius: '5px'
        }, {
            top: totalHeight + 'px',
            left: '5%',
            width: '90%',
            height: "100px",
        })
        view.drawText(state.mapping[permissionID].title, {
            top: totalHeight + 5 + 'px',
            left: "8%",
            height: "30px"
        }, {
            align: "left",
            color: "#000",
        }, {
            onClick: function (e) {
                console.log(e);
            }
        })
        view.drawText(state.mapping[permissionID].content, {
            top: totalHeight + 35 + 'px',
            height: "60px",
            left: "8%",
            width: "84%"
        }, {
            whiteSpace: 'normal',
            size: "14px",
            align: "left",
            color: "#656563"
        })
		//console.log(view)
        function show() {
			//view = plus.nativeObj.View.getViewById('per-modal');
			// console.log("===============================")
			// console.log(plus.nativeObj.View)
			// console.log(plus.nativeObj.View.getViewById('per-modal'))
			// console.log(view)
			view.show()
			view = null//展示的时候也得清空，不然影响下次的关闭，不知道为啥
			// console.log(view)
			// console.log("===============================")
        }
 
        function close() {
            view = plus.nativeObj.View.getViewById('per-modal');
            view.close();
            view = null
        }
        return {
            show,
            close
        }
    },
 
    // 跳转到**应用**的权限页面
    gotoAppPermissionSetting({
        state
    }) {
        if (state.isIos) {
            var UIApplication = plus.ios.import("UIApplication");
            var application2 = UIApplication.sharedApplication();
            var NSURL2 = plus.ios.import("NSURL");
            // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");		
            var setting2 = NSURL2.URLWithString("app-settings:");
            application2.openURL(setting2);
 
            plus.ios.deleteObject(setting2);
            plus.ios.deleteObject(NSURL2);
            plus.ios.deleteObject(application2);
        } else {
            // console.log(plus.device.vendor);
            var Intent = plus.android.importClass("android.content.Intent");
            var Settings = plus.android.importClass("android.provider.Settings");
            var Uri = plus.android.importClass("android.net.Uri");
            var mainActivity = plus.android.runtimeMainActivity();
            var intent = new Intent();
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
            intent.setData(uri);
            mainActivity.startActivity(intent);
        }
    }
}
export default {
    namespaced: true,
    state,
    mutations,
    actions
};